perm filename TEST3[2,DBL] blob sn#016210 filedate 1972-12-17 generic text, type T, neo UTF8
00100	BEGIN
64200	EXPR REC2(FN,A,N,RELATEDF);
64300	     BEGIN NEW I,II,I1,I2,KK,JJ1,JJ2;
64400	     EE1←NIL;
64500	     EE2 ← NIL;
64600	     L1← NIL;
64700	     L2 ← NIL;
64800	     E←NIL;
64900	     MA←T;
65000	     MN←T;
65100	     MAL←T;
65200	     MA2 ←T;
65300	      MN2←T;
65400	     MAL2←T;
65500	     E1←NIL;
65600	     E2←NIL;
65700	     EXAMPLE[NEX+2,1]←L;
65800	     FOR NEW X←1 TO NEX+1 DO BEGIN
65900	       E1← EXAMPLE[X+1,1,1];
66000	       E2← EXAMPLE[X+1,1,2];
66100	     MA← MA AND ATOM(E1);
66200	     MA2← MA2 AND ATOM(E2);
66300	     MN ← MN AND NUMBER(E1);
66400	     MN2 ← MN2 AND NUMBER(E2);
66500	     MAL ← MAL AND ANYLIST(E1);
66600	     MAL2 ← MAL2 AND ANYLIST(E2);
66700	     END;
66800	     I← '(ANY ANY);
66900	     IF MAL THEN I[1] ← 'ANYLIST;
67000	     IF MAL2 THEN I[2] ← 'ANYLIST;
67100	     IF MA THEN I[1] ← 'ATOM;
67200	     IF MA2 THEN I[2] ← 'ATOM;
67300	     IF MN THEN I[1] ← 'NUMBER;
67400	     IF MN2 THEN I[2] ← 'NUMBER;
67500	     PUTPROP ('FN2, I, 'TARGS);
67600	     PUTPROP ('FN2, 2, 'NARGS);
67700	     PUTPROP ('FN2, 'ANY, 'TRES);
67800	     IHOLD← I;
67900	     PRINTSTR '"DO YOU KNOW THE TYPE OF ARGUMENTS FOR THE FN?
68000	        MY GUESS IS";
68100	     PRINC (IHOLD);
68200	     PRINTSTR '"     ANSWER N MEANS GUESS IS OK,
68300	       ANSWER Y MEANS YOU WANT TO CHANGE MY GUESS ...";
68400	     I←READ();
68500	     IF I='Y THEN BEGIN
68600	      PRINTSTR '"TYPE IN TWO OF THE WORDS:
68700	     ANY  ANYLIST  NUMBER  LISTP
68800	                          ( LISTP MEANS A NONNULL LIST)...";
68900	     I ← READ();
69000	     II ← READ();
69100	     IHOLD ← <I,II>;
69200	      PUTPROP('FN2, IHOLD, 'TARGS);
69300	     END;
69400	     FOR NEW K←1 TO 19 DO
69500	     ORD[K]←INTERSECTION(RELATEDF[1]@RELATEDF[2]@<'FN2>
69600	       @RELATEDF[3]@RELATEDF[4], ORDER2[K]);
69700	     FOR NEW K←1 TO 19 DO
69800	       ORD[K] ← RANK(K,ORD);
69900	     PRINTSTR '"DO YOU WANT TO CUT DOWN THE POSSIBILITIES?";
70000	     I←READ();
70100	     IF I='Y THEN  FOR NEW X←1 TO 19 DO
70200	     BEGIN
70300	     PRINT <'ORD,X,ORD[X]>;
70400	     PRINTSTR '"NOW RETYPE THIS SECTION OF ORD:";
70500	     I←READ();
70600	     IF NOT(I='S) THEN ORD[X]←I;
70700	     END;
70800	     IF C1='UNKNOWN THEN C1=T;
70900	     IF C3='UNKNOWN THEN C3=T;
71000	     I←NIL; II←NIL;
71100	     LIMINF←LIMINFBASE;
71200	     TAGF1 ← F1;
71300	    TAGF7 ← F7;
71400	    FOR NEW T2 ← 1 TO LENGTH(ORD[2]) DO BEGIN
71500	       F2 ← ORD[2,T2];
71600	     IF GREATERP(MSGLEVEL,0) THEN
71700	       PRINT <2,'T2,T2,'F2,F2>;
71800	     IF GREATERP(MSGLEVEL,49) THEN
71900	     PRINT<'L,L,'RELATEDFUNCTIONS,RELATEDF,'ORD,ORD>;
72000	     IF FOR NEW X← 2 TO NEX+1; AND
72100	        MAT(EXAMPLE[X,1],F2)        THEN
72200	     FOR NEW T3 ← 1 TO LENGTH(ORD[3]) DO BEGIN
72300	       F3←ORD[3,T3];
72400	     IF GREATERP(MSGLEVEL,1) THEN
72500	        PRINT <3,'T3,T3,'F3,F3>;
72600	      IF FOR NEW X←2 TO NEX+1; AND
72700	        MAT3(EXAMPLE[X,1],F3) THEN
72800	        FOR NEW T1←1 TO LENGTH(ORD[1]) DO BEGIN
72900	        F1← ORD[1,T1];
73000	       IF GREATERP(MSGLEVEL,2) THEN PRINT <1,'T1,T1,'F1,F1>;
73100	       IF FOR NEW X←2 TO NEX+1; AND
73200	           MAT2(EXAMPLE[X,1],F1,F2,F3) AND
73300	           (TAGF1 OR GOODEX=NIL OR F1(F2 (GOODEX[1,1]),
73400	             F3(GOODEX[1,2]))=C1) THEN
73500	     FOR NEW T5←1 TO LENGTH(ORD[5]) DO BEGIN
73600	     F5 ← ORD[5,T5];
73700	     IF GREATERP(MSGLEVEL,4) THEN PRINT<5,'T5,T5,'F5,F5>;
73800	      IF FOR NEW X←2 TO NEX+1; AND MAT(EXAMPLE[X,1],F5) THEN
73900	     FOR NEW T6←1 TO LENGTH(ORD[6]) DO BEGIN
74000	     F6 ← ORD[6,T6];
74100	     IF GREATERP(MSGLEVEL,5) THEN PRINT <6,'T6,T6,'F6,F6>;
74200	     IF FOR NEW X←2 TO NEX+1; AND MAT3(EXAMPLE[X,1],F6) THEN
74300	     FOR NEW T4← 1 TO LENGTH(ORD[4]) DO BEGIN
74400	     F4←ORD[4,T4];
74500	     IF GREATERP(MSGLEVEL,6) THEN PRINT <4,'T4,T4,'F4,F4>;
74600	     IF FOR NEW X←2 TO NEX+1; AND
74700	       MAT2(EXAMPLE[X,1],F4,F5,F6) AND
74800	       (LENGTH(ORD[4])=1 OR C2=NIL OR C2=UNKNOWN
74900	         OR F4(F5(L),F6(M))=C2)  THEN
75000	     FOR NEW T8←1 TO LENGTH(ORD[8]) DO BEGIN
75100	     F7←ORD[7,T7];
75200	     IF(GREATERP(MSGLEVEL,6)) THEN PRINT <7,'T7,T7,'F7,F7>;
75300	     IF FOR NEW X←2 TO NEX+1; AND MAT(EXAMPLE[X,1],F7) THEN
75400	     FOR NEW T9←1 TO LENGTH(ORD[9]) DO BEGIN
75500	     F9 ← ORD[9,T9];
75600	     IF GREATERP(MSGLEVEL,7) THEN PRINT <9,'T9,T9,'F9,F9>;
75700	     IF FOR NEW X←2 TO NEX+1; AND MAT3(EXAMPLE[X,1],F9) THEN
75800	     FOR NEW T7←1 TO LENGTH(ORD[7]) DO  BEGIN
75900	     F7←ORD[7,T7];
76000	     IF GREATERP(MSGLEVEL,8) THEN PRINT <7,'T7,T7,'F7,F7 >;
76100	     IF FOR NEW X←2 TO NEX+1; AND
76200	       MAT2(EXAMPLE[X,1],F7,F8,F9) AND
76300	       (TAGF7 OR GOODEX2=NIL OR
76400	        F7(F8(GOODEX2[1,1]),F9(GOODEX2[1,2]))=C3) THEN
76500	     FOR NEW T11←1 TO LENGTH(ORD[11]) DO BEGIN
76600	     F11←ORD[11,T11];
76700	     IF GREATERP(MSGLEVEL,9) THEN PRINT <11,'T11,T11,'F11,F11>;
76800	     IF FOR NEW X←2 TO NEX+1; AND MAT(EXAMPLE[X,1],F11) THEN
76900	     FOR NEW T12←1 TO LENGTH(ORD[12]) DO BEGIN
77000	     F12←ORD[12,T12];
77100	     IF GREATERP(MSGLEVEL,10) THEN PRINT <12,'T12,T12,'F12,F12>;
77200	     IF FOR NEW X←2 TO NEX+1; AND MAT3(EXAMPLE[X,1],F12) THEN
77300	     FOR NEW T10←1 TO LENGTH(ORD[10]) DO BEGIN
77400	     F10←ORD[10,T10];
77500	     IF GREATERP(MSGLEVEL,11) THEN PRINT <12,'T12,T12,'F12,F12>;
77600	     IF FOR NEW X←2 TO NEX+1; AND MAT2(EXAMPLE[X,1],F10,F11,F12) THEN
77700	     FOR NEW T15← 1 TO LENGTH(ORD[15]) DO BEGIN
77800	     F15← ORD[15,T15];
77900	     IF GREATERP(MSGLEVEL,12) THEN PRINT <15,'T15,T15,'F15,F15>;
78000	     IF FOR NEW X←2 TO NEX+1; AND MAT(EXAMPLE[X,1],F15) THEN
78100	     FOR NEW F16←1 TO LENGTH(ORD[16]) DO BEGIN
78200	     F16←ORD[16,T16];
78300	     IF GREATERP(MSGLEVEL,13) THEN PRINT <16,'T16,T16,'F16,F16>;
78400	     IF FOR NEW X←2 TO NEX+1; AND MAT3(EXAMPLE[X,1],F16) THEN
78500	     FOR NEW T14←1 TO LENGTH(ORD[14]) DO BEGIN
78600	     F14←ORD[14,T14];
78700	     IF GREATERP(MSGLEVEL,14) THEN PRINT <14,'T14,T14,'F14,F14>;
78800	     IF FOR NEW X←2 TO NEX+1; AND MAT2(EXAMPLE[X,1],F14,F15,F16) THEN
78900	     FOR NEW T18←1 TO LENGTH(ORD[18]) DO BEGIN
79000	     F18←ORD[18,T18];
79100	     IF GREATERP(MSGLEVEL,15) THEN PRINT <18,'T18,T18,'F18,F18>;
79200	     IF FOR NEW X←2 TO NEX+1; AND MAT(EXAMPLE[X,1],F18) THEN
79300	     FOR NEW T19←1 TO LENGTH(ORD[19]) DO BEGIN
79400	     F19←ORD[19,T19];
79500	     IF GREATERP(MSGLEVEL,16) THEN PRINT <19,'T19,T19,'F19,F19>;
79600	     IF FOR NEW X←2 TO NEX+1; AND MAT3(EXAMPLE[X,1],F19) THEN
79700	     FOR NEW T17←1 TO LENGTH(ORD[17]) DO BEGIN
79800	     F17←ORD[17,T17];
79900	     IF GREATERP(MSGLEVEL,17) THEN PRINT <17,'T17,T17,'F17,F17>;
80000	     IF FOR NEW X←2 TO NEX+1; AND MAT2(EXAMPLE[X,1],F17,F18,F19) THEN
80100	     FOR NEW T13←1 TO LENGTH (ORD[13]) DO BEGIN
80200	     F13←ORD[13,T13];
80300	     IF GREATERP(MSGLEVEL,18) THEN PRINT <13,'T13,T13,'F13,F13>;
81700	     END UNTIL I
81800	     END UNTIL I
81900	     END UNTIL I
82000	     END UNTIL I
82100	     END UNTIL I
82200	     END UNTIL I
82300	     END UNTIL I
82400	     END UNTIL I
82500	     END UNTIL I
82600	     END UNTIL I
82700	     END UNTIL I
82800	     END UNTIL I
82900	     END UNTIL I
83000	     END UNTIL I
83100	     END UNTIL I
83200	     END UNTIL I
83300	      END UNTIL I
83400	     END UNTIL I
83500	     END UNTIL I;
83600	     IF GREATERP(MSGLEVEL,0) THEN
83700	      PRINT <'F1TOF19,F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,
83800	        F11,F12,F13,F14,F15,F16,F17,F18,F19,'C1234,C1,C2,
83900	        C3,C4>;
84000	     KNOWNF ← FN2 CONS KNOWNF;
84100	     TARG ← GET('FN,'TARGS) CONS TARG;
84200	     NARG← N CONS NARG;
84300	     TRE ← GET('FN,'TRES) CONS TRE;
84400	     BA2 ← FN2 CONS BA2;
84500	     IF GREATERP(MSGLEVEL,35) THEN PRINT <'KNOWNF,KNOWNF,
84600	       'RELATESDF,RELATEDF,'TARG,TARG,'NARG,NARG,'TRE,
84700	       TRE,'BA2,BA2>;
84800	      PUTPROP(FN2,2,NARGS);
84900	     PUTPROP(FN2,IHOLD,TARGS);
85000	     PUTPROP(FN2,'ANY,TRES);
85100	      FINALIZE2();
85200	     FOR NEW J←1 TO 19 DO PUTPROP(FN2,11,P2F[J]);
85300	     RETURN FN2;
85400	     END;
85500	EXPR PRIM2();
85600	     BEGIN NEW I;
85700	     GOODEX ← NIL;
85800	     GOODEX2 ← NIL;
85900	     ONEX ← 0;
86000	     F1 ← NIL
86100	     F12 ← NIL
86200	     F3 ← NIL
86300	     F2 ← NIL;
86400	     F4 ← NIL;
86500	     F5 ← NIL;
86600	     F6 ← NIL;
86700	     F7 ← NIL;
86800	     F8 ← NIL;
86900	     F9←NIL;
87000	     F10 ← NIL;
87100	     F11 ← NIL;
87200	     PRINTSTR '"THERE IS SOME PRIMITIVE CASE (OR TWO).
87300	     DO YOU KNOW ANYTHING ABOUT IT? Y OR N...";
87400	     I← READ();
87500	     IF I='N THEN  BEGIN
87600	       IF GREATERP(MSGLEVEL,3) THEN PRINTSTR 
87700	       '"I AM ASSUMING F1 THROUGH F12 TO BE NIL,
87800	         C1 AND C3 TO BE T, C2 AND C4 TO BE UNKNOWN";
87900	       C1 ←T;
88000	       C3← T;
88100	       C2← UNKNOWN;
88200	       C4 ← UNKNOWN;
88300	     EXAMPLE[1] ←<C1,C2>;
88400	     RETURN NIL; 
88500	     END  ALSO RETURN NIL;
88600	     PRINTSTR '"FOR SOME FUNCTIONS F1,F2,F3,F4,F5,F6,
88700	     AND SOME CONSTANT C1, WHEN
88800	       F1( F2(ARG1), F3(ARG2) )  =  C1    THEN
88900	     THE VALUE OF YOUR FUNCTION IS 
89000	       F4( F5(ARG1), F6(ARG2) ) = C2
89100	
89200	     NOW TYPE IN NIL OR A FUNCTION NAME FOR F1,F2,F3,F4,F5,F6:";
89300	     F1←READ();
89400	     F2←READ();
89500	     F3←READ();
89600	     F4←READ();
89700	     F5←READ();
89800	     F6←READ();
89900	     PRINTSTR '"NOW TYPE IN A CONSTANT OR THE VALUE UNKNOWN FOR C1";
90000	     C1←READ();
90100	     PRINTSTR '"IF C2 IS A CONSTANT, TYPE IN ITS VALUE. IF IT
90200	     IS NOT CONSTANT, OR IF YOU DONT KNOW THE VALUE,TYPE UNKNOWN";
90300	     C2←READ();
90400	     EXAMPLE[1]←<C1,C2>;
90500	     PRINTSTR '"CAN YOU GIVE ME AN EXAMPLE OF THIS
90600	     PRIMITIVE CASE? Y OR N...";
90700	     I←READ();
90800	     IF I='Y THEN I←GETEX(2) ALSO ONEX←1 ALSO GOODEX←EXAMPLE[2];
90900	     PRINTSTR '"IS THERE ANOTHER PRIMITICE CASE? Y OR N...";
91000	     I←READ();
91100	     IF I='N THEN BEGIN
91200	     C3←T;
91300	    C4←UNKNOWN;
91400	     F7←'FALSE2;
91500	     F8←'FALSE;
91600	     F9←'FALSE;
91700	     F10←'FALSE2;
91800	     F11←'FALSE;
91900	     F12←'FALSE;
92000	     END ALSO RETURN NIL;
92100	     PRINTSTR '"FOR SOME FUNCTIONS F7,F8,F9,F10,F11,F12,
92200	     AND SOME CONSTANT C3, WHEN
92300	       F7( F8(ARG1), F9(ARG2) ) = C3 THEN
92400	     THE VALUE OF YOUR FUNCTION IS
92500	       F10( F11(ARG1), F12(ARG2) ) = C4
92600	
92700	     NOW TYPE IN NIL OR A FUNCTION NAME FOR F7 THROUGH F12:";
92800	     R`F7←READ();
92900	     F8←READ();
93000	     F9←READ();
93100	     F10←READ();
93200	     F11←READ();
93300	     F12←READ();
93400	     PRINTSTR '"NOW TYPE IN UNKNOWN OR A CONSTANT FOR C3,C4:";
93500	     C3←READ();
93600	     C4←READ();
93700	     PRINTSTR '"CAN YOU GIVE ME AN EXAMPLE OF THIS? Y OR N>>>";
93800	     I←READ();
93900	     IF I='Y THEN I←GETEX(3) ALSO ONEX←2 ALSO GOODEX2←EXAMPLE[3];
94000	     RETURN NIL;
94100	     END;
94200	EXPR FSUB(I);
94300	     IF I=1 THEN F1
94400	     ELSE IF I=2 THEN F2
94500	     ELSE IF I=3 THEN F3
94600	     ELSE IF I=4 THEN F4
94700	     ELSE IF I=5 THEN F5
94800	     ELSE IF I=6 THEN F6
94900	     ELSE IF I=7 THEN F7
95000	     ELSE IF I=8 THEN F8
95100	     ELSE IF I=9 THEN F9
95200	     ELSE IF I=10 THEN F10
95300	     ELSE IF I=11 THEN F11
95400	     ELSE IF I=12 THEN F12
95500	     ELSE IF I=13 THEN F13
95600	     ELSE IF I=14 THEN F14
95700	     ELSE IF I=15 THEN F15
95800	     ELSE IF I=16 THEN F16
95900	     ELSE IF I=17 THEN F17
96000	     ELSE IF I=18 THEN F18
96100	     ELSE IF I=19 THEN F19
96200	     ELSE PRINT <'FSUBERROR,'I,I>;
96300	EXPR FINALIZE2();
96400	     BEGIN
96500	     FOR NEW I←1 TO 19 DO
96600	     IF F1='FN2 THEN F1←FN2;
96700	     IF F4='FN2 THEN F4←FN2;
96800	     IF F7='FN2 THEN F7←FN2;
96900	     IF F10='FN2 THEN F10←FN2;
97000	     IF F13='FN2 THEN F13←FN2;
97100	     IF F14='FN2 THEN F14←FN2;
97200	     IF F17='FN2 THEN F17←FN2;
97300	     EVAL <'DE, FN2, '(L M),
97400	     <'COND, <<'EQUAL, <F1, <F2, 'L>,<F3,'M>>,C1>,
97500	                       <F4, <F5, 'L>,<F6, 'M>>>,
97600	                <<'EQUAL,<F7,<F8,'L>,<F9,'M>>,C3>,
97700	                         <F10,<F11,'L>,<F12,'M>>>,
97800	         <T,<F13,<F14,<F15,'L>,<F16,'M>>,
97900	                 <F17,<F18,'L>,<F19,'M>>>>>>;
98000	     RETURN KEEP();
98100	     END;
98200	EXPR FALSE2(A B); NIL;
98300	EXPR GT2(L M); OR(GOODEX AND GOODEX[1,1]=L AND GOODEX[1,2]=M,
98400	     GOODEX2 AND GOODEX2[1,1]=L AND GOODEX2[1,2]=M);
98500	EXPR MAT(E F);
98600	     GT2(CAR(E),CADR(E)) OR
98700	     EVAL '((CAR (GET F TARGS)) (CAR E));
98800	EXPR MAT2(E F G1 G2);
98900	     GT2(CAR(E),CADR(E))  OR
99000	     EVAL '((CAR (GET F TARGS)) (G1 (CAR E))) AND
99100	    EVAL '((CADR (GET F TARGS)) (G2 (CADR E));
99200	EXPR FALSE2(A B); NIL;
99300	EXPR MAT3(E F);
99400	     GT2(CAR(E),CADR(E)) OR
99500	     EVAL '((CAR (GET F TARGS)) (CADR E));
99600	END.